' *************************
' ** COMPILER DIRECTIVES **
' *************************
$regfile "attiny261.DAT" 'Her hentes registrene for microctrolleren
$crystal = 8000000 'Her fortælles hvilken frekvens oscillatoren har
' *************************
' ** CONFIGURATION **
' *************************
Config Portb = Output 'Alle bit på port B deffineres som output
Config Porta = Input 'Alle bit på port A deffineres som input
Config Timer1 = Pwm , Prescale = 32 'Timer1 deffineres som PWM timer og prescale sættes til 32 således frekvensen bliver xx MHz
Declare Sub Getval
' ** SETTING UP PWM ** ' I dette afsnit sættes diverse således PWM signalernes opsætning er korrekt
Tccr1a = &B01010011 ' PWM1A = clear up, PWM1B = clear up
Tccr1d.1 = 0 ' WGM11 = 0 Aktiverer "Phase & frequency correct PWM"
Tccr1d.0 = 1 ' WGM10 = 1 ^
Ocr1c = &B11111111 ' Timer1 TOP=255
Tcnt1 = &B00000000 ' Timer1 val=0, start Timer1
' Pwm inversion=0, prescaler reset=0, dead time prescaler=0, Prescale = 32
Tccr1b = &B00000110
' Enable PWM1D, CLEAR UP
Tccr1c.0 = 1
Tccr1c.2 = 1
Tccr1c.3 = 0
' Easier aliases for pwm-outputs
Red Alias Ocr1a 'Kalder OCR1A for red
Green Alias Ocr1b 'Kalder OCR1B for green
Blue Alias Ocr1d 'Kalder OCR1D for blue
' ** SETTING UP VARIABLES **
' Variable decleration
Dim Value As Word
' Variable initialization
Value = 0
' *************************
' ** MAIN LOOP **
' *************************
Do
Call Getval 'Kalder subfunktionen getval som sætter globalvariablen "value"
Beginning: 'Opretter forbindelsespunkt "Beginning"
If Value < 8 Then 'Hvis value er større eller 0 OG mindre end 9 udføres kodeblokken ellers springes den over.
Red = 0 'Sætter rød til 0, altså slukket
Green = 0 'Sætter grøn til 0, altså slukket
Blue = 0 'Sætter blå til 0, altså slukket
End If
If Value >= 8 And Value < 15 Then
Red = 255 'Sætter rød til 255, altså 100% tændt
Green = 0
Blue = 0
End If
If Value >= 15 And Value < 23 Then
Red = 0
Green = 255
Blue = 0
End If
If Value >= 23 And Value < 31 Then
Red = 0
Green = 0
Blue = 255
End If
If Value >= 31 And Value < 39 Then
Red = 255
Green = 255
Blue = 0
End If
If Value >= 39 And Value < 46 Then
Red = 255
Green = 0
Blue = 255
End If
If Value >= 46 And Value < 54 Then
Red = 0
Green = 255
Blue = 255
End If
If Value >= 54 And Value < 62 Then
Red = 255
Green = 255
Blue = 255
End If
If Value >= 70 Then
Red = 0
Green = 0
Blue = 0
End If
If Value >= 62 And Value < 70 Then
Do 'Her sættes blå til max og alle andre slukkes
Blue = 255
Green = 0
Red = 0
Do 'Her forøges styrken på den røde fra 0 til 255 med ca. hvert ms.
Red = Red + 1
Waitms 1
Call Getval 'Kalder subfunktionen getval for at tjekke at PWM signalet ikke forandrer sig.
If Value < 71 Then 'Hvis PWM signalet har forandret sig slukkes alle farver og programmet køres forfra.
Blue = 0
Green = 0
Red = 0
Goto Beginning
End If
Loop Until Red = 255
Do 'Styrken på blå aftager fra 255 til 0.
Blue = Blue - 1
Waitms 1
Call Getval
If Value < 71 Then
Blue = 0
Green = 0
Red = 0
Goto Beginning
End If
Loop Until Blue = 0
Do 'Styrken på grøn forøges fra 0 til 255.
Green = Green + 1
Waitms 1
Call Getval
If Value < 71 Then
Blue = 0
Green = 0
Red = 0
Goto Beginning
End If
Loop Until Green = 255
Do 'Styrken på rød afteges fra 255 til 0.
Red = Red - 1
Waitms 1
Call Getval
If Value < 71 Then
Blue = 0
Green = 0
Red = 0
Goto Beginning
End If
Loop Until Red = 0
Do 'Styrken på blå forøges fra 0 til 255.
Blue = Blue + 1
Waitms 1
Call Getval
If Value < 71 Then
Blue = 0
Green = 0
Red = 0
Goto Beginning
End If
Loop Until Blue = 255
Do
Green = Green - 1 'Styrken på grøn aftages fra 255 til 0.
Waitms 1
Call Getval
If Value < 71 Then
Blue = 0
Green = 0
Red = 0
Goto Beginning
End If
Loop Until Green = 0
End If 'Her sluttes "pulseringsløkken" ligesom den startede.. Blå tændt, grøn og rød slukket.
Loop 'Loop således pulseringsløkken starter igen
Loop
Sub Getval
Do
Value = 0
Loop Until Pina.0 = 0
Do
Value = 0
Loop Until Pina.0 = 1
Do
Value = Value + 1
Loop Until Pina.0 = 0
End Sub